In modern integrated circuit design, a microprocessor is designed in functional blocks, each of which perform a certain task. Some functional blocks are, for example, a prefetch unit, a pipeline execution unit, a cache, a bus interface unit, a floating point execution unit, and the like. These functional blocks have many inputs and output which are coupled to other inputs and outputs of other functional blocks which are not accessible by external pins/terminals. Therefore, if one would want to test, for example, an operand cache unit in isolation, the task would be very complex since the inputs and outputs of the operand data cache (or any functional block for that matter) cannot be accessed readily via the integrated circuit external pins/terminals. In addition, since the external pins/terminals do not have direct access to a functional block's inputs and outputs, setting initial test conditions and reading test results or output values is extremely complicated. A method for testing functional blocks in an efficient manner is needed.